// shell输出文字颜色处理插件
require('colors');
const mongoose = require('mongoose');
// 全局禁用缓存(不允许在数据库连接之间缓存数据库操作,因为有错误不会报出来)
mongoose.set('bufferCommands', false);

const hostname = "0.0.0.0";
const port = 27017;//mongoDB专用端口
const dbname = "oak";//库名

const username = "";
const password = "";
const options = {
  //如不写,会报警告warming
  useNewUrlParser: true,
  useUnifiedTopology: true,
  // 使用And连接的sql语句时汇报警告,所以设置'useFindAndModify'为fasle
  useFindAndModify: false
}

/**
 * mongoose.connect('mongodb://用户名:密码@127.0.0.1:27017/数据库名称');//格式
 * 连接多个数据库，只需要设置多个url以,隔开，同时设置mongos为true
 * 
 * const DB_URL = `mongodb://${username}:${password}@${hostname}:${port}/${dbname}`;
 * 上线时若没有用户名和密码,但是又写了就可能链接失败,索性省略不写
 */

const DB_URL = `mongodb://${hostname}:${port}/${dbname}`;
// mongoose.connect(DB_URL, options).then(() => {
//     console.log("[mongodb] 连接成功 (^し^)".green);
// }).catch(err => {
//     // 不要throw,影响其他
//     console.error("[mongodb] 连接失败, 抛出错误 (′⌒`)".red, err)
// })

mongoose.connect(DB_URL, options);
mongoose.connection.on("connected", () => {
  console.log("[mongodb] 连接成功 (^し^)".green);
});
mongoose.connection.on('error', err => {
  console.error("[mongodb] 连接失败, 抛出错误 (′⌒`)".red, err)
})


module.exports = mongoose;

/**
 * TODO: 监听: 可写可不写,没什么用,了解
 * const connection = mongoose.connection;
 * connection.on("connected", () => { 连接成功 })
 * connection.on("open", () => { 数据库开启});
 * connection.on('error', err => { 链接异常})
 * connection.on('disconnected', () => { 监听断开链接})
 * mongoose.disconnect(function(){ 主动断开操作})
 */

 // 连接(mlab)线上数据库
/*mongoose.connect('mongodb://test:test123456@ds119210.mlab.com:19210/koa-restful-api', {
    useNewUrlParser: true
}).then(() => {
    console.log('数据连接成功')
}).catch(err => {
    console.log(err)
})*/
